gorgonia.org/gorgonia@v0.9.17/cuda modules/src/misc.cu (about)

     1  #define _USE_MATH_DEFINES
     2  #include <math.h>
     3  
     4  #define THREADID \
     5  	int blockId = blockIdx.x + blockIdx.y * gridDim.x + gridDim.x * gridDim.y * blockIdx.z;\
     6  	int idx = blockId * (blockDim.x * blockDim.y * blockDim.z) + (threadIdx.z * (blockDim.x * blockDim.y)) + (threadIdx.y * blockDim.x) + threadIdx.x;
     7  
     8  #define CHECKSIZE \
     9  	if (idx >= size) { \
    10  		return; \
    11  	}
    12  
    13  extern "C" { 
    14  	__global__ void hasNaN_f32(float* A, int size, int* retVal) {
    15  		THREADID
    16  		CHECKSIZE
    17  		if (isnan(A[idx])) {
    18  			(*retVal)++;
    19  		}
    20  		return;
    21  	}
    22  }
    23  
    24  extern "C" { 
    25  	__global__ void hasNaN_f64(double* A, int size, int* retVal) {
    26  		THREADID
    27  		CHECKSIZE
    28  		if (isnan(A[idx])) {
    29  			(*retVal)++;
    30  		}
    31  		return;
    32  	}
    33  }
    34  
    35  extern "C" { 
    36  	__global__ void hasInf_f32(float* A, int size, int* retVal) {
    37  		THREADID
    38  		CHECKSIZE
    39  		if (isinf(A[idx])) {
    40  			(*retVal)++;
    41  		}
    42  		return;
    43  	}
    44  }
    45  
    46  
    47  extern "C" { 
    48  	__global__ void hasInf_f64(double* A, int size, int* retVal) {
    49  		THREADID
    50  		CHECKSIZE
    51  		if (isinf(A[idx])) {
    52  			(*retVal)++;
    53  		}
    54  		return;
    55  	}
    56  }
    57  
    58  /*
    59  */